'''
Author: luqinghua
Date: 2025-04-24 11:16:14
LastEditors: luqinghua
LastEditTime: 2025-04-24 11:16:36
FilePath: \pywebview-vue\python\start_tool.py
Description: 
'''

import ctypes
import sys
import socket
import win32gui
import win32con

# 定义 Windows API 常量
ES_CONTINUOUS = 0x80000000
ES_DISPLAY_REQUIRED = 0x00000002

class StartTool:
    def __init__(self):
        pass
    
    # 单实例模式判断
    def is_single_instance(self):
        try:
            global s
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.bind(("127.0.0.1", 9999))
            return True
        except socket.error:
            return False

    # 判断是否管理员   
    def is_admin(self):
        try:
            return ctypes.windll.shell32.IsUserAnAdmin()
        except:
            return False
    # 管理员权限启动当前程序
    def elevate_restart(self): 
        ctypes.windll.shell32.ShellExecuteW(
            None,                # 父窗口句柄
            "runas",             # 操作：请求管理员权限
            sys.executable,     # 当前可执行文件路径
            " ".join(sys.argv), # 传递原始命令行参数
            None,                # 工作目录（默认当前目录）
            1                    # 显示窗口标志（SW_SHOWNORMAL）
        )
        sys.exit()  # 关闭当前非管理员进程

    # 切换到已打开的应用
    def switch_to_existing_window():
        # 查找窗口，这里根据窗口标题查找，需根据实际情况修改
        window_title = "RPA Client"
        hwnd = win32gui.FindWindow(None, window_title)
        if hwnd:
            # 激活窗口
            win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)
            win32gui.SetForegroundWindow(hwnd)

    def prevent_screen_lock(self):
    # 调用 Windows API 设置电源状态，防止屏幕锁定
        ctypes.windll.kernel32.SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED)

    def allow_screen_lock(self):
    # 恢复默认的电源状态，允许屏幕锁定
        ctypes.windll.kernel32.SetThreadExecutionState(ES_CONTINUOUS)
    
